// maps2.js

function Znacznik(opcje)
{
    this.prototype = new google.maps.Marker();
    this.prototype.title = opcje.title;
    this.prototype.position = opcje.position;
    this.prototype.map = opcje.map;
    this.prototype.indeks = opcje.indeks;
    this.prototype.icon = opcje.icon;
    this.prototype.getIndeks = function() { return this.indeks; }
    this.prototype.setIndeks = function(i) {this.indeks = i;}
}

var mapa;
var es;
var znaczInfo,pozInfo = new google.maps.InfoWindow({size : new google.maps.Size(50,50)});
var linie = [new google.maps.Polyline({map : null, clickable : false, strokeColor : '#00FF00'}), new google.maps.Polyline({map : null, clickable : false, strokeColor : '#FF0000'})]; // zielona i czerwona linia
var wybrZnacz, dystZnacz,pozZnacz;
var gm = new google.maps.MarkerImage("m/gm2.png");
var bm = new google.maps.MarkerImage("m/bm2.png");
var rm = new google.maps.MarkerImage("m/rm2.png");
var ostWspol = new google.maps.LatLng(52.25,21.0);
var biezZoom = 12;
var znaczniki = [];
var tekst = "", menu="<p><a href='javascript:usunZnacz()'>Usuń znacznik</a></p>";

function initMapa()
{
    var opcjeMapy = {zoom : biezZoom, center : ostWspol, mapTypeId : google.maps.MapTypeId.TERRAIN, draggableCursor: 'crosshair'};
    mapa = new google.maps.Map(document.getElementById("mapa"),
        opcjeMapy);
    znaczInfo = new google.maps.InfoWindow(
      { 
        size: new google.maps.Size(50,50)
      });
    google.maps.event.addListener(znaczInfo,'closeclick',function() 
        { 
            wybrZnacz = null;  
            if (dystZnacz)
                dystZnacz.setIcon(gm); 
            dystZnacz = null;
            znaczInfo.close(); 
            linie[0].setMap(null);
            linie[1].setMap(null);
    });
    google.maps.event.addListener(pozInfo,'closeclick',function() {
        if (pozZnacz)
        {
            pozInfo.close();
            pozZnacz.setMap(null);
            pozZnacz = null;
        }
    });
	google.maps.event.addListener(mapa,'zoom_changed', function() { biezZoom = mapa.getZoom(); });
	google.maps.event.addListener(mapa,'rightclick', function(event) {
	    var opcjeZnacz = { position : event.latLng, map : mapa, icon : rm };
	    if (pozZnacz)
	        pozZnacz.setMap(null);
	    pozZnacz = new google.maps.Marker(opcjeZnacz);
	    pozInfo.open(mapa,pozZnacz);
	    pozInfo.setContent('Współrzędne (Szerokość, Długość):<br><b> '+pozZnacz.getPosition().toUrlValue()+'</b>');
	});
	es = new google.maps.ElevationService();
}

function los(psd,ksd)
{
    var sciezka = [psd,ksd]; // sciezka miedzy znacznikami
    es.getElevationAlongPath({path : sciezka, samples : 512},rysujSciezke);
    
}

function rysujSciezke(punkty,status)
{
    var ki = 0;
    var s = punkty[0], e = punkty[punkty.length-1], se = s.elevation, ee = e.elevation, pm = null;
    for (var i = 1; i < punkty.length-1; i++)
    {
        var te = punkty[i].elevation;
        if (te > se+1.70 && te > ee)
        {
            if (!pm || te > pm.elevation)
                pm = punkty[i];
        }
    }
    linie[0].setMap(mapa);
    if (!pm)
        linie[0].setPath([s.location,e.location]);
    else
    {
        linie[0].setPath([s.location,pm.location]);
        linie[1].setMap(mapa);
        linie[1].setPath([pm.location,e.location]);
    }
    
    
}

function usunZnacz()
{
    znaczInfo.close();
    wybrZnacz.setMap(null);
    znaczniki[wybrZnacz.indeks] = null;
    wybrZnacz = null;
    if (dystZnacz)
        dystZnacz.setIcon(gm);
    dystZnacz = null;
    linie[0].setMap(null);
    linie[1].setMap(null);
}

function utworzZnacznik(szer,dlug,tytul)
{
    ostWspol = new google.maps.LatLng(szer,dlug);
    var opcjeZnacz = {title : tytul, position : ostWspol, map : mapa, icon : gm};
    google.maps.Marker.prototype.indeks = znaczniki.length;
    nowy = new google.maps.Marker(opcjeZnacz);
    nowy.indeks = znaczniki.length;
    wyswietlInfo(nowy,tytul);
    return nowy;
}

function wyswietlInfo(znacznik,txt)
{
	google.maps.event.addListener(znacznik, 'click', function() {
	if (!wybrZnacz)
	{
	    tekst = "<p>"+txt+" "+znacznik.getPosition().toString()+"</p>"+menu;
	    znaczInfo.setContent(tekst);
        znaczInfo.open(mapa,znacznik);
        wybrZnacz = znacznik;
    }
    else
    {
        if (dystZnacz)
            dystZnacz.setIcon(gm);
        dystZnacz = znacznik;
        dystZnacz.setIcon(bm);
        var dist = odleglosc(wybrZnacz.getPosition(), dystZnacz.getPosition());
        znaczInfo.setContent(tekst+"<p>Odległość od punktu <b>"+znacznik.getTitle()+"</b>: "+Math.round(dist*1000)+" m</p>");
        los(wybrZnacz.getPosition(),dystZnacz.getPosition());
    }
  });
}

function dodajJeden()
{
    var msz = parseFloat(document.getElementById('msz').value);
	var mdl = parseFloat(document.getElementById('mdl').value);
	var tytul = document.getElementById('mtyt').value;
	znaczniki.push(utworzZnacznik(msz,mdl,tytul));
	mapa.setCenter(ostWspol);
}

function dodajLista()
{
    var wiersze = document.getElementById('wiersze').value.split('\n');
	for (w in wiersze)
	{
		var tmp = wiersze[w].split(';');
		znaczniki.push(utworzZnacznik(parseFloat(tmp[1]),parseFloat(tmp[2]),tmp[0]));
	}
	mapa.setCenter(ostWspol);
}

function odleglosc(ip, dp) 
{
    var R = 6371;
    //var ip = wybrZnacz.getPosition(), dp = dystZnacz.getPosition();
    var dLat = (ip.lat()-dp.lat()) * Math.PI / 180;
    var dLon = (ip.lng()-dp.lng()) * Math.PI / 180; 
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(dp.lat() * Math.PI / 180) * Math.cos(ip.lat() * Math.PI / 180) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    return R * c;
}


  

